В прошлом шаге мы с Вами посмотрели как самому перерисовать элементы списка. Но данная возможность используется часто и для многих элементов управления.
void CTabCtrl::DrawItem( LPDRAWITEMSTRUCT lpDrawItemStruct ); void CListBox::DrawItem( LPDRAWITEMSTRUCT lpDrawItemStruct ); void CButton::DrawItem( LPDRAWITEMSTRUCT lpDrawItemStruct ); void CComboBox::DrawItem( LPDRAWITEMSTRUCT lpDrawItemStruct ); void CCheckListBox::DrawItem( LPDRAWITEMSTRUCT lpDrawItemStruct ); void CMenu::DrawItem( LPDRAWITEMSTRUCT lpDrawItemStruct ); void CHeaderCtrl::DrawItem( LPDRAWITEMSTRUCT lpDrawItemStruct ); void CStatusBar::DrawItem( LPDRAWITEMSTRUCT lpDrawItemStruct );
Со всеми этими классами работа производится совершенно идентично. Устанавливается стиль и перегружается функция DrawItem(), в которую передается указатель на структуру DRAWITEMSTRUCT содержащей информация о том, что нужно отрисовывать. Вот она какая.
/*
* DRAWITEMSTRUCT for ownerdraw
*/
typedef struct tagDRAWITEMSTRUCT
{
UINT CtlType; // Тип элемента управления
UINT CtlID; // Идентификатор элемента управления
UINT itemID; // Идентификатор перерисовываемого пункта
UINT itemAction; // Как перерисовывать
UINT itemState; // Состояние после перерисовки
HWND hwndItem; // Дескриптор элемента управления
HDC hDC; // Контекст устройства рисования
RECT rcItem; // Граница рисования
DWORD itemData; // Адрес элемента для перерисовки
} DRAWITEMSTRUCT, NEAR *PDRAWITEMSTRUCT, FAR *LPDRAWITEMSTRUCT;
CtlType - тип элемента для перерисовки:
itemAction - как перерисовывать:
itemState - состояние после перерисовки: